/*
 * @lc app=leetcode.cn id=1237 lang=javascript
 *
 * [1237] 找出给定方程的正整数解
 */

// @lc code=start
/**
 * // This is the CustomFunction's API interface.
 * // You should not implement it, or speculate about its implementation
 * function CustomFunction() {
 *     @param {integer, integer} x, y
 *     @return {integer}
 *     this.f = function(x, y) {
 *         ...
 *     };
 * };
 */

/**
 * @param {CustomFunction} customfunction
 * @param {integer} z
 * @return {integer[][]}
 */
var findSolution = function(customfunction, z) {
    var r = new Array();
    var my = 1000; // 记录当前y可取的最大值

    for(let x = 1; x <= 1000; x++) {
        
        for(let y = my; y >= 1; y--) {
            let fz = customfunction.f(x, y);
            if(fz > z) {
                // f(xi, yi) > z
                // 则对于任意x > xi，有f(xi, yi) > z
                my = y - 1;
                continue;
            } else if(fz == z) {
                // 找到结果，f(xi, yi) == z
                // 则对于任意x > xi，有f(x, yi) > z
                r.push([x, y]);
                my = y - 1;
                break;
            } else if(fz < z) {
                // f(xi, yi) < z
                // 注意此处隐含条件是f(xi, yi + 1) > z
                // 所以对于任意x > xi，有f(x, yi + 1) > z
                // 故下个循环从yi开始即可。
                my = y;
                break;
            }
        }
    }
    return r;

};
// @lc code=end

